"""author: wenyao
   data: 2021/3/26
   project: devopscmdb
"""

# 什么是集合( set )
# • 集合是一个无序的，不重复的数据组合
# • 集合是一个只含有key的字典
#  集合的作用
# • 去重：把一个列表变成集合，就自动去重了
# • 关系测试：测试两组数据之前的交集、差集、并集等关系

# 集合元素必须是可hash对象，跟字典一样
# • set和dict的唯一区别仅在于没有存储对应的value

# >>> s1 = {1,2,3}
# >>> type(s1)
# <class 'set'>
# >>> s2 = {}
# >>> type(s2)
# <class 'dict'>
# >>> s2 = set([1,2,3,4,5,6,2,3,4,4])
# >>> s2
# {1, 2, 3, 4, 5, 6}
# >>> s2 = {1,2,[1,2]}
# Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
# TypeError: unhashable type: 'list'


##########集合的添加##############
#add    添加一项
#update  添加多项 传入一个可迭代对象
# >>> s = {1,2,3}
# >>> s.add(4)
# >>> s
# {1, 2, 3, 4}
# >>> s.update({'a':1,"b""2})
#   File "<stdin>", line 1
#     s.update({'a':1,"b""2})
#                           ^
# SyntaxError: EOL while scanning string literal
# >>> s.update({'a':1,"b":2})
# >>> s
# {1, 2, 3, 4, 'b', 'a'}
# >>> s.update('abc')
# >>> s
# {1, 2, 3, 4, 'b', 'a', 'c'}


#############删除##############
# >>> s
# {1, 2, 3, 4, 'b', 'a', 'c'}
# >>> s.remove("a")
# >>> s.remove("b")
# >>> s
# {1, 2, 3, 4, 'c'}
# >>> s.discard(1)
# >>> s.discard(2)
# >>> s
# {3, 4, 'c'}
# >>> s.remove('x')
# Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
# KeyError: 'x'
# >>> s.discard('x')

######集合的运算  并集  交集 差集  对称差集
# >>> s1 = {1,2,3}
# >>> s2 = {2,3,4}
# >>> s1 & s2
# {2, 3}
# >>> s1 | s2
# {1, 2, 3, 4}
# >>> s1 - s2
# {1}
# >>> s2 - s1
# {4}
# >>> s1 ^ s2
# {1, 4}
